SEMAINE DU 24 JUIN 2024 au 28 JUIN 2024 :

OBJECTIF : Analyser la base de données

ANALYSE DE LA BASE DE DONNÉES

I ) Import de la nouvelle base de données formattée

# Import des données

data <- readRDS("/home/solene_petito/Bureau/Stage/Broken_devices/data/data1.rds") # base de données sur laquelle on va appliquer tous les changements

Broken_Devices_Data <- read.csv("/home/solene_petito/Bureau/Stage/Broken_devices/data/Broken-Devices-Data1-xlsx.csv",row.names=1) # base de données initiale sur laquelle on pourra se référer pour voir si les chgts ont bien été appliqués

# nombre d'observations
nb_obs <- nrow(data) # 968 

# nombre de variables 
nb_var <- ncol(data) # 164

II ) Systèmes d’exploitation et dysfonctionnements

La question posée était : Quel est le système d’exploitation de ce smartphone ?

Les réponses possibles étaient :

  • 1 : IOS (Apple)
  • 2 : Android
  • 3 : Autre
  • 4 : Je ne sais pas

La plupart des propriétaires de smartphone ont donc des android (67% des personnes de la base).

Regardons maintenant le nombre de personnes rencontrant des dysfonctionnements pour chaque systèmes d’exploitation :

##   Sytèmes.d.exploitation Nb_personnes Nb_personnes_dys Pourcentage_dys
## 1            IOS (Apple)          291              125              43
## 2                Android          652              264              40
## 3                  Autre           12                7              58
## 4         Je ne sais pas           13                4              31

Le diagramme à barres suivant permet de visualiser cette répartition :

III ) Temps de cohabitation de ceux qui n’ont résolu le problème

pbs= Count_VCM(data$RIDENTIFICATION_PROBLEMES,26)
nb_total_pbs <- sum(pbs[2,])
print(nb_total_pbs) #832
## [1] 832
# Initialisation des vecteurs pour stocker les valeurs de recence, année, et mois
recence <- c()
annee <- c()
mois <- c()

# Filtrer les données pour exclure les problèmes identifiés avec le code "27"
df <- data[which(data$RIDENTIFICATION_PROBLEMES != "27"),]

# Parcourir les colonnes de 81 à 105
for (i in 81:105) {
  # Parcourir les lignes du dataframe filtré
  for (j in 1:nrow(df)) {
    val <- df[j, i]
    # Vérifier si la valeur n'est pas NA avant de vérifier si elle est 4 ou 5
    if (!is.na(val) && (val == 4 || val == 5)) {
      RECENCE <- df[j, i - 25]
      # Vérifier si RECENCE n'est pas NA et val n'est pas NULL
      if (!is.na(RECENCE)) {
        recence <- c(recence, RECENCE)
        annee <- c(annee, df[j, "DATEOBTENTIONSMART_1"])
        mois <- c(mois, df[j, "DATEOBTENTIONSMART_2"])
      }
    }
  }
}

# Suppression de la raison 7 dans la liste recence 

indices_rec_7= which(recence==7)
recence=recence[-c(indices_rec_7)]
annee=annee[-c(indices_rec_7)]
mois=mois[-c(indices_rec_7)]

# Afficher les résultats pour vérifier
print(recence)
##   [1] 4 1 5 4 5 2 4 3 2 4 4 3 1 4 4 4 4 3 4 3 3 6 6 4 5 5 1 5 1 5 4 2 3 6 4 1 4
##  [38] 4 5 3 4 3 1 1 3 2 5 6 3 2 4 2 3 5 4 6 2 4 2 2 5 4 1 1 2 3 4 6 1 5 3 6 2 5
##  [75] 6 1 2 4 5 3 2 5 2 6 6 4 2 5 1 4 3 6 4 5 5 3 6 6 4 5 4 3 2 2 3 5 5 4 1 2 3
## [112] 4 2 4 3 4 4 3 5 4 6 1 1 4 3 2 5 4 2 5 4 1 2 3 4 3 5 3 4 4 3 4 5 3 3 2 5 1
## [149] 1 2 3 1 1 6 2 2 3 6 6 2 5 2 6 3 4 5 2 4 3 2 3 4 1 6 6 1 4 1 4 3 3 3 4 5 4
## [186] 4 4 2 6 6 6 2 4 4 3 4 5 4 4 4 4 3 3 4 3 5 1 4 4 5 2 4 3 4 5 4 5 5 6 4 3 4
## [223] 2 1 3 5 3 5 6 6 4 4 2 6 4 1 3 1 3 2 1 1 5 1 2 3 2 6 5 4 5 3 2 2 5 3 3 3 6
## [260] 5 3 3 6 4 5 4 4 5 5 2 3 3 4 4 6 4 4 4 3 2 3 5 5 5 5 3 5 6 6 6 6 4 4 5 6 5
## [297] 4 2 3 6 4 4 4 3 4 3 2 2 3 2 5 4 4 2 4 5
print(annee)
##   [1] 2021 2023 2022 2020 2019 2020 2021 2022 2023 2019 2019 2020 2022 2021 2021
##  [16] 2019 2022 2022 2021 2023 2023 2023 2018 2021 2019 2015 2023 2020 2017 2020
##  [31] 2022 2020 2022 2008 2023 2023 2022 2022 2020 2022 2022 2023 2022 2022 2021
##  [46] 2022 2020 2021 2022 2023 2022 2023 2022 2021 2021 2020 2023 2018 2023 2020
##  [61] 2021 2021 2023 2023 2020 2021 2022 2023 2023 2015 2022 2018 2023 2020 2019
##  [76] 2020 2023 2021 2019 2022 2023 2019 2023 2017 2018 2020 2022 2015 2023 2022
##  [91] 2023 2020 2019 2020 2020 2023 2019 2019 2016 2020 2022 2023 2023 2021 2021
## [106] 2020 2020 2019 2022 2023 2022 2023 2021 2022 2005 2020 2022 2022 2022 2021
## [121] 2018 2022 2022 2021 2020 2022 2021 2023 2023 2020 2022 2023 2022 2022 2021
## [136] 2020 2019 2022 2020 2022 2022 2021 2015 2020 2022 2020 2020 2022 2020 2023
## [151] 2022 2023 2023 2019 2023 2023 2023 2019 2020 2023 2020 2021 2018 2023 2020
## [166] 2020 2023 2021 2018 2021 2022 2021 2023 2018 2019 2023 2022 2022 2020 2023
## [181] 2020 2022 2019 2019 2020 2021 2021 2022 2019 2019 2020 2023 2022 2020 2021
## [196] 2018 2020 2019 2021 2021 2022 2022 2023 2021 2020 2020 2023 2020 2022 2019
## [211] 2023 2021 2022 2019 2023 2020 2020 2018 2019 2023 2023 2020 2023 2022 2019
## [226] 2021 2023 2018 2019 2019 2023 2020 2023 2023 2019 2020 2022 2022 2019 2023
## [241] 2021 2023 2020 2020 2023 2022 2023 2023 2020 2021 2019 2020 2023 2020 2020
## [256] 2019 2023 2022 2018 2021 2023 2022 2019 2021 2019 2022 2020 2018 2019 2023
## [271] 2023 2022 2020 2021 2018 2021 2022 2022 2023 2022 2022 2019 2020 2019 2022
## [286] 2023 2015 2018 2020 2019 2020 2021 2016 2020 2020 2018 2021 2023 2021 2018
## [301] 2019 2019 2022 2023 2020 2022 2021 2022 2022 2022 2020 2022 2021 2023 2022
## [316] 2020
print(mois)
##   [1] 12 10  2 10  2  9 12 99  2 99 99  6  6  2 12  8  5 11  9  2  5 11  5 99 12
##  [26]  2  9  6 11  6  9  1 10  1  1 10  2  5  6  3 99  2  1  6 12  1 99  2  1  7
##  [51]  9  2  9  7 12  4  6  3  2 99  7 12  1  7  6 12  1 11 10  2  4  7  2 99 99
##  [76]  6  8  9  9  8  5  7  3  4  5 10  1  2  6 10  2  9  4  9 11  5  3 11  8  4
## [101]  1  5  2  3  7  8 99  9  9  3  6  8 11  3  3 12  4  2  4  2  2  4  6  2 12
## [126]  6  2 99  7  8  5  6  1 12  9 99  9 12  6  1  8  5  6  4 12  6 99  5 99  2
## [151]  1 10 10  2  2 10  2 10  6  2  6  9  8  8  4  6  2  3  1  9 11 12 10  5  2
## [176] 11  7  5  6  2  9  8 10  7  2 99 12  3  2  4  9  2  3 12  3  6 99 99  9 12
## [201]  5 11  6  1  2 11 99  8  1  9  5  4  8 10  7  9 99  6  2 99  2  6  2 11 99
## [226]  7  2  6  4  2 99  9 10  5  5  6 11  9 11  2  7  6  9  3  2  2  4 11  2 99
## [251]  4  9  2  4 99 99  2  7  8 11  8 12  7 99  4  7 12  6  9  3  2  7  1  2  2
## [276] 12  1  3  8  8 12  7  2 10  2  2  6  5 11  2  9  1  8  6  6  3  1  2  1  6
## [301]  9 99  2  2 12  7  9  6 11  6  8  5  9  5  3  6

Changement du mois non renseigné indiqué par la valeur 99, par un mois “moyen” d’obtention pour l’année en question :

indices_mois_99 <- which(mois==99)
for (i in 1:length(indices_mois_99)){
  indice=indices_mois_99[i]
  year=annee[i]
  indices_annees = which(annee==year)
  liste_mois=mois[indices_annees]
  liste_mois=liste_mois[liste_mois!=99]
  mois[indice]=round(mean(liste_mois))
}
print(mois)
##   [1] 12 10  2 10  2  9 12  7  2  5  6  6  6  2 12  8  5 11  9  2  5 11  5  7 12
##  [26]  2  9  6 11  6  9  1 10  1  1 10  2  5  6  3  6  2  1  6 12  1  7  2  1  7
##  [51]  9  2  9  7 12  4  6  3  2  7  7 12  1  7  6 12  1 11 10  2  4  7  2  6  5
##  [76]  6  8  9  9  8  5  7  3  4  5 10  1  2  6 10  2  9  4  9 11  5  3 11  8  4
## [101]  1  5  2  3  7  8  6  9  9  3  6  8 11  3  3 12  4  2  4  2  2  4  6  2 12
## [126]  6  2  6  7  8  5  6  1 12  9  7  9 12  6  1  8  5  6  4 12  6  6  5  7  2
## [151]  1 10 10  2  2 10  2 10  6  2  6  9  8  8  4  6  2  3  1  9 11 12 10  5  2
## [176] 11  7  5  6  2  9  8 10  7  2  7 12  3  2  4  9  2  3 12  3  6  6  6  9 12
## [201]  5 11  6  1  2 11  6  8  1  9  5  4  8 10  7  9  7  6  2  5  2  6  2 11  5
## [226]  7  2  6  4  2  5  9 10  5  5  6 11  9 11  2  7  6  9  3  2  2  4 11  2  5
## [251]  4  9  2  4  7  6  2  7  8 11  8 12  7  4  4  7 12  6  9  3  2  7  1  2  2
## [276] 12  1  3  8  8 12  7  2 10  2  2  6  5 11  2  9  1  8  6  6  3  1  2  1  6
## [301]  9  5  2  2 12  7  9  6 11  6  8  5  9  5  3  6

Création des dates avec l’année et le mois renseignés dans les listes annee et mois précédemment :

dates = c()
for (i in 1:length(recence)){
  date_str <- paste(annee[i], sprintf("%02d", mois[i]), "01", sep = "-")
  dates=c(dates,date_str)
}

dates
##   [1] "2021-12-01" "2023-10-01" "2022-02-01" "2020-10-01" "2019-02-01"
##   [6] "2020-09-01" "2021-12-01" "2022-07-01" "2023-02-01" "2019-05-01"
##  [11] "2019-06-01" "2020-06-01" "2022-06-01" "2021-02-01" "2021-12-01"
##  [16] "2019-08-01" "2022-05-01" "2022-11-01" "2021-09-01" "2023-02-01"
##  [21] "2023-05-01" "2023-11-01" "2018-05-01" "2021-07-01" "2019-12-01"
##  [26] "2015-02-01" "2023-09-01" "2020-06-01" "2017-11-01" "2020-06-01"
##  [31] "2022-09-01" "2020-01-01" "2022-10-01" "2008-01-01" "2023-01-01"
##  [36] "2023-10-01" "2022-02-01" "2022-05-01" "2020-06-01" "2022-03-01"
##  [41] "2022-06-01" "2023-02-01" "2022-01-01" "2022-06-01" "2021-12-01"
##  [46] "2022-01-01" "2020-07-01" "2021-02-01" "2022-01-01" "2023-07-01"
##  [51] "2022-09-01" "2023-02-01" "2022-09-01" "2021-07-01" "2021-12-01"
##  [56] "2020-04-01" "2023-06-01" "2018-03-01" "2023-02-01" "2020-07-01"
##  [61] "2021-07-01" "2021-12-01" "2023-01-01" "2023-07-01" "2020-06-01"
##  [66] "2021-12-01" "2022-01-01" "2023-11-01" "2023-10-01" "2015-02-01"
##  [71] "2022-04-01" "2018-07-01" "2023-02-01" "2020-06-01" "2019-05-01"
##  [76] "2020-06-01" "2023-08-01" "2021-09-01" "2019-09-01" "2022-08-01"
##  [81] "2023-05-01" "2019-07-01" "2023-03-01" "2017-04-01" "2018-05-01"
##  [86] "2020-10-01" "2022-01-01" "2015-02-01" "2023-06-01" "2022-10-01"
##  [91] "2023-02-01" "2020-09-01" "2019-04-01" "2020-09-01" "2020-11-01"
##  [96] "2023-05-01" "2019-03-01" "2019-11-01" "2016-08-01" "2020-04-01"
## [101] "2022-01-01" "2023-05-01" "2023-02-01" "2021-03-01" "2021-07-01"
## [106] "2020-08-01" "2020-06-01" "2019-09-01" "2022-09-01" "2023-03-01"
## [111] "2022-06-01" "2023-08-01" "2021-11-01" "2022-03-01" "2005-03-01"
## [116] "2020-12-01" "2022-04-01" "2022-02-01" "2022-04-01" "2021-02-01"
## [121] "2018-02-01" "2022-04-01" "2022-06-01" "2021-02-01" "2020-12-01"
## [126] "2022-06-01" "2021-02-01" "2023-06-01" "2023-07-01" "2020-08-01"
## [131] "2022-05-01" "2023-06-01" "2022-01-01" "2022-12-01" "2021-09-01"
## [136] "2020-07-01" "2019-09-01" "2022-12-01" "2020-06-01" "2022-01-01"
## [141] "2022-08-01" "2021-05-01" "2015-06-01" "2020-04-01" "2022-12-01"
## [146] "2020-06-01" "2020-06-01" "2022-05-01" "2020-07-01" "2023-02-01"
## [151] "2022-01-01" "2023-10-01" "2023-10-01" "2019-02-01" "2023-02-01"
## [156] "2023-10-01" "2023-02-01" "2019-10-01" "2020-06-01" "2023-02-01"
## [161] "2020-06-01" "2021-09-01" "2018-08-01" "2023-08-01" "2020-04-01"
## [166] "2020-06-01" "2023-02-01" "2021-03-01" "2018-01-01" "2021-09-01"
## [171] "2022-11-01" "2021-12-01" "2023-10-01" "2018-05-01" "2019-02-01"
## [176] "2023-11-01" "2022-07-01" "2022-05-01" "2020-06-01" "2023-02-01"
## [181] "2020-09-01" "2022-08-01" "2019-10-01" "2019-07-01" "2020-02-01"
## [186] "2021-07-01" "2021-12-01" "2022-03-01" "2019-02-01" "2019-04-01"
## [191] "2020-09-01" "2023-02-01" "2022-03-01" "2020-12-01" "2021-03-01"
## [196] "2018-06-01" "2020-06-01" "2019-06-01" "2021-09-01" "2021-12-01"
## [201] "2022-05-01" "2022-11-01" "2023-06-01" "2021-01-01" "2020-02-01"
## [206] "2020-11-01" "2023-06-01" "2020-08-01" "2022-01-01" "2019-09-01"
## [211] "2023-05-01" "2021-04-01" "2022-08-01" "2019-10-01" "2023-07-01"
## [216] "2020-09-01" "2020-07-01" "2018-06-01" "2019-02-01" "2023-05-01"
## [221] "2023-02-01" "2020-06-01" "2023-02-01" "2022-11-01" "2019-05-01"
## [226] "2021-07-01" "2023-02-01" "2018-06-01" "2019-04-01" "2019-02-01"
## [231] "2023-05-01" "2020-09-01" "2023-10-01" "2023-05-01" "2019-05-01"
## [236] "2020-06-01" "2022-11-01" "2022-09-01" "2019-11-01" "2023-02-01"
## [241] "2021-07-01" "2023-06-01" "2020-09-01" "2020-03-01" "2023-02-01"
## [246] "2022-02-01" "2023-04-01" "2023-11-01" "2020-02-01" "2021-05-01"
## [251] "2019-04-01" "2020-09-01" "2023-02-01" "2020-04-01" "2020-07-01"
## [256] "2019-06-01" "2023-02-01" "2022-07-01" "2018-08-01" "2021-11-01"
## [261] "2023-08-01" "2022-12-01" "2019-07-01" "2021-04-01" "2019-04-01"
## [266] "2022-07-01" "2020-12-01" "2018-06-01" "2019-09-01" "2023-03-01"
## [271] "2023-02-01" "2022-07-01" "2020-01-01" "2021-02-01" "2018-02-01"
## [276] "2021-12-01" "2022-01-01" "2022-03-01" "2023-08-01" "2022-08-01"
## [281] "2022-12-01" "2019-07-01" "2020-02-01" "2019-10-01" "2022-02-01"
## [286] "2023-02-01" "2015-06-01" "2018-05-01" "2020-11-01" "2019-02-01"
## [291] "2020-09-01" "2021-01-01" "2016-08-01" "2020-06-01" "2020-06-01"
## [296] "2018-03-01" "2021-01-01" "2023-02-01" "2021-01-01" "2018-06-01"
## [301] "2019-09-01" "2019-05-01" "2022-02-01" "2023-02-01" "2020-12-01"
## [306] "2022-07-01" "2021-09-01" "2022-06-01" "2022-11-01" "2022-06-01"
## [311] "2020-08-01" "2022-05-01" "2021-09-01" "2023-05-01" "2022-03-01"
## [316] "2020-06-01"
# Définir les dates de début et de fin
date_debut <- as.Date("2022-05-01")
date_fin <- as.Date("2023-11-01")

# Calculer la différence en jours
diff_jours <- as.numeric(difftime(date_fin, date_debut, units = "days"))

# Afficher le résultat
print(diff_jours)
## [1] 549
# Année et mois en chiffres
annee <- 2022
mois <- 10

# Convertir en chaîne de caractères au format "YYYY-MM-DD"
date_str <- paste(annee, sprintf("%02d", mois), "01", sep = "-")

# Afficher la chaîne de caractères
print(date_str)
## [1] "2022-10-01"
liste=c(0,list(c(1,83)),list(c(84,365)),list(c(366,730)),list(c(731,1095)),1096)
a=liste[[2]]
length(a)
## [1] 2
# Date de départ
date_depart <- as.Date("2022-12-01")

# Ajouter 500 jours
date_nouvelle <- date_depart + 500

# Afficher la nouvelle date
print(date_nouvelle)
## [1] "2024-04-14"
mois
## [1] 10
mois[-1]
## numeric(0)

III ) Etat du smartphone

Combien de personnes ont acheté leur smartphone neuf ? Combien l’ont eu d’occasion ? Combien l’on acheté reconditionné ? Le graphe suivant nous apporte plus de détails :

Parmis ces différents états quelle est la part de dysfonctionnements ?

##             État Nb_personnes Nb_personnes_dys Pourcentage_dys
## 1           Neuf          792              316              40
## 2     D'occasion           88               45              51
## 3  Reconditionné           83               37              45
## 4 Je ne sais pas            5                2              40

IV ) Groupement des thématiques par catégories

1 ) Groupement à plus grosses mailles

2 ) Groupement plus fin par thématiques

Les différentes catégories pourraient être :

  • Problèmes matériels : Problème avec l’écran, Problème de sensibilité du tactile, Problème avec l’appareil photo, Problème avec la lampe torche ou le flash, Problème avec le micro, Problème de son, Problème de prise jack, Problème de chargement, Problème de batterie, Problème de capteurs, Problème avec les boutons, Problème de vibreur

  • Problèmes de connectivité (ou de réseau) : Problème avec le GPS, Problème de Wi-Fi, Problème de Bluetooth ou de transferts de fichiers sans fil, Problème de téléphonie, Problème d’accès à Internet

  • Problèmes logiciels : Système d’exploitation non mis à jour, Applications ne pouvant pas être téléchargées ou mises à jour, Fonctionnalité qui ne marche plus, Dysfonctionnement logiciel, Problèmes avec des applications

  • Problèmes de performance : Problème de lenteur, Stockage saturé

  • Problèmes divers : Problème lié à une fonctionnalité manquante, Autre

label_dys <- c("Matériel","Logiciel","Réseau","Performance","Divers")

materiel <- c(1,2,1,3,4,6,7,8,9,10,11,12,16,17)
logiciel <- c(19,20,22,23,24)
reseau <- c(5,11,13,14,15)
performance <- c(18,25)
divers <- c(21,26)

# Trouver la liste qui contient le plus d'éléments pour après définir le nombre de colonnes de notre matrice
max_length <- max(length(materiel), length(logiciel), length(reseau), length(performance), length(divers))

# Initialiser la matrice avec des zéros
matrice_cat <- matrix(0, nrow = 5, ncol = max_length)

# Remplir les lignes de la matrice avec les listes
matrice_cat[1, 1:length(materiel)] <- materiel
matrice_cat[2, 1:length(logiciel)] <- logiciel
matrice_cat[3, 1:length(reseau)] <- reseau
matrice_cat[4, 1:length(performance)] <- performance
matrice_cat[5, 1:length(divers)] <- divers

# Afficher la matrice
print(matrice_cat)
##      [,1] [,2] [,3] [,4] [,5] [,6] [,7] [,8] [,9] [,10] [,11] [,12] [,13] [,14]
## [1,]    1    2    1    3    4    6    7    8    9    10    11    12    16    17
## [2,]   19   20   22   23   24    0    0    0    0     0     0     0     0     0
## [3,]    5   11   13   14   15    0    0    0    0     0     0     0     0     0
## [4,]   18   25    0    0    0    0    0    0    0     0     0     0     0     0
## [5,]   21   26    0    0    0    0    0    0    0     0     0     0     0     0

Le tableau suivant donne le nombre de dysfonctionnements rencontrés pour chaque catégorie, et la part de chaque catégorie par rapport au nombre total de dysfonctionnements qui est de 832 :

##   Dysfonctionnements Nb_dys Pourcentage_dys
## 1           Matériel    392              47
## 2           Logiciel    160              19
## 3             Réseau    115              14
## 4        Performance    176              21
## 5             Divers     31               4

Le graphique à barres suivant permet de visualiser ces valeurs :

Parmis ces différentes catégories quels sont les types de gênes ressentis pour chacun des dysfonctionnements, le tableau suivant indique ces différents types de gênes ressenties pour chacunes des catégories en pourcentage :

##   Dysfonctionnements Nb_dys Trés.gênant Plutôt.gênant Plutôt.pas.gênant
## 1           Matériel    392          31            46                19
## 2           Logiciel    160          29            50                19
## 3             Réseau    115          35            48                15
## 4        Performance    176          36            50                14
## 5             Divers     31          10            39                29
##   Pas.gênant.du.tout
## 1                  4
## 2                  2
## 3                  2
## 4                  0
## 5                 10

Le graphique à barres suivant permet de visualiser cette répartion :

indice_colonne <- which(names(data) == "RECENCE_PROBLEMES_A1")
print(indice_colonne) # 106
## [1] 56
indice_colonne <- which(names(data) == "REPARATION_A1")
print(indice_colonne) # 81
## [1] 81
indice_colonne <- which(names(data) == "RECENCE_PROBLEMES_A25")
print(indice_colonne) # 80
## [1] 80
indice_colonne <- which(names(data) == "REPARATION_A25")
print(indice_colonne) #105
## [1] 105
81-56
## [1] 25